package cn.blnp.net.flowable.task.service.introduce;

import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.FlowableFutureJavaDelegate;
import org.springframework.stereotype.Component;

/**
 * <h3></h3>
 *
 * @author <a href="mailto:blnp.yibin@qq.com">lyb</a>
 * @version 1.0
 * @since 2025/5/12 17:36
 */
@Slf4j
@Component
public class MyFlowableFutureJavaDelegate implements FlowableFutureJavaDelegate {
    @Override
    public Object prepareExecutionData(DelegateExecution execution) {
        //这里与流程实例是在同一个数据库事务中运行，可以通过execution设置和获取相关数据
        //这里用于初始化异步执行前的数据
        return null;
    }

    @Override
    public Object execute(Object inputData) {
        //inputData参数是prepareExecutionData()方法返回的结果
        //这里的代码将由Flowable交由线程池异步运行，通常用于执行一些比较耗时的复杂逻辑
        //这里没有数据库事务，如果需要事务控制，应该由自己的服务进行管理
        return null;
    }

    @Override
    public void afterExecution(DelegateExecution execution, Object executionData) {
        //executionData参数是execute()方法返回的结果
        //这里与流程实例是在同一个数据库事务中运行，可以通过execution进行一些操作，比如设置变量
        execution.setVariable("totalAmount", executionData);
    }
}
